package com.zenithmind.news.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.zenithmind.common.result.PageResult;
import com.zenithmind.news.pojo.dto.NewsCreateDTO;
import com.zenithmind.news.pojo.entity.News;
import com.zenithmind.news.pojo.vo.NewsVO;

import java.time.LocalDateTime;

/**
 * 新闻基础服务接口 - 遵循接口隔离原则
 * 只包含新闻的基本CRUD操作
 *
 * @author ZenithMind Team
 * @since 2025-01-09
 */
public interface NewsService extends IService<News> {

    /**
     * 创建新闻
     *
     * @param createDTO 创建DTO
     * @return 新闻VO
     */
    NewsVO createNews(NewsCreateDTO createDTO);

    /**
     * 分页查询新闻列表
     *
     * @param current 当前页
     * @param size 页大小
     * @param categoryId 分类ID
     * @param status 新闻状态
     * @param type 新闻类型
     * @param keyword 关键词
     * @param startTime 开始时间
     * @param endTime 结束时间
     * @return 分页结果
     */
    PageResult<NewsVO> getNewsPage(Long current, Long size, String categoryId,
                                  Integer status, Integer type, String keyword,
                                  LocalDateTime startTime, LocalDateTime endTime);

    /**
     * 根据ID查询新闻详情
     *
     * @param id 新闻ID
     * @param userId 用户ID（用于记录行为）
     * @return 新闻VO
     */
    NewsVO getNewsById(String id, String userId);

    /**
     * 更新新闻
     *
     * @param id 新闻ID
     * @param updateDTO 更新DTO
     * @return 是否成功
     */
    Boolean updateNews(String id, NewsCreateDTO updateDTO);

    /**
     * 删除新闻
     *
     * @param id 新闻ID
     * @return 是否成功
     */
    Boolean deleteNews(String id);

    /**
     * 发布新闻
     *
     * @param id 新闻ID
     * @return 是否成功
     */
    Boolean publishNews(String id);

    /**
     * 下架新闻
     *
     * @param id 新闻ID
     * @return 是否成功
     */
    Boolean unpublishNews(String id);

    /**
     * 更新新闻状态
     *
     * @param id 新闻ID
     * @param status 状态
     * @return 是否成功
     */
    Boolean updateNewsStatus(String id, String status);

    /**
     * 审核新闻
     *
     * @param id 新闻ID
     * @param approved 是否通过
     * @param comment 审核意见
     * @return 是否成功
     */
    Boolean reviewNews(String id, Boolean approved, String comment);
}
